package com.grupobbva.seguridad.web.servlet.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.grupobbva.seguridad.domain.Aplicacion;
import com.grupobbva.seguridad.domain.Opcion;
import com.grupobbva.seguridad.domain.OpcionPK;
import com.grupobbva.seguridad.domain.Perfil;
import com.grupobbva.seguridad.domain.Perfil;
import com.grupobbva.seguridad.domain.PerfilOpcion;
import com.grupobbva.seguridad.domain.PerfilOpcionPK;
import com.grupobbva.seguridad.domain.PerfilPK;
import com.grupobbva.seguridad.domain.TablaDetalle;
import com.grupobbva.seguridad.service.AdministracionService;
import com.grupobbva.seguridad.service.SeguridadService;
import com.grupobbva.seguridad.util.Constante;
import com.grupobbva.seguridad.util.ResultadoOperacion;
import com.grupobbva.seguridad.util.ResultadoOperacionExito;
import com.grupobbva.seguridad.util.Util;

@Controller
public class AsignacionPerfilAplicacionController extends BaseController {

	@Autowired
	private AdministracionService administracionService;
	
	@Autowired
	private SeguridadService seguridadService;
/*
	@RequestMapping("/perasgmnt.do")
    public String mostrar(HttpServletRequest request) throws Exception {
		request.setAttribute("perfil", seguridadService.obtenerPerfil(new PerfilPK(getParameterLong(request, "aplicacionId"), getParameterLong(request, "perfilId"))));
    	return getRelativeURL("perasgmnt");
    }
	@RequestMapping("/perasglst.do")
    public String listar(HttpServletRequest request) throws Exception {
		request.setAttribute("aplicaciones", seguridadService.obtenerPerfilAplicaciones(getParameterLong(request, "filtroPerfilId")));
    	return getRelativeURL("perasglst");
    }*/
	/*@RequestMapping("/perasgupd.do")
    public String modificar(HttpServletRequest request) throws Exception {
		PerfilPK perfilPK = new PerfilPK(getParameterLong(request, "perfilId"), getParameterLong(request, "aplicacionId"));
		Perfil   perfil = null;
		if (perfilPK.getAplicacionId() == null) {
			perfil = new Perfil(perfilPK);
			perfil.setEstado(new TablaDetalle());
			//perfil.setPerfil(seguridadService.obtenerPerfil(getParameterLong(request, "perfilId")));
			
			request.setAttribute("aplicaciones", seguridadService.obtenerPerfilAplicacionesNoAsignadas(perfilPK.getPerfilId()));
		} else {
			perfil = seguridadService.obtenerPerfilAplicacion(perfilPK);
		}
		request.setAttribute("perfilAplicacion", perfil);
		request.setAttribute("estados", administracionService.obtenerDetalles(Constante.TG_ESTADOS_REGISTRO));
    	return getRelativeURL("perasgreg");
    }*/
	@RequestMapping("/perasgopc.do")
    public String mostrarAsignacionOpciones(HttpServletRequest request) throws Exception {
		PerfilPK perfilPK = new PerfilPK(getParameterLong(request, "perfilId"), getParameterLong(request, "aplicacionId"));
		Perfil   perfil = seguridadService.obtenerPerfilAplicacion(perfilPK);
		if(perfil == null) {
			perfil = new Perfil();
			perfil.setEstado(new TablaDetalle());
		}
		request.setAttribute("perfilAplicacion", perfil);
		request.setAttribute("opciones"        , seguridadService.obtenerPerfilAplicacionOpcionesSeleccion(perfilPK));		
    	return getRelativeURL("perasgopc");
    }
	/*@RequestMapping("/perasgreg.do")
    public String grabarAsignacion(@ModelAttribute("perfilAplicacion") Perfil perfil, HttpServletRequest request) throws Exception {
		ResultadoOperacion resultado = null;
		try {
			String codigoMensaje  = "perfilAplicacion.registrar.exito";
			
			String[] opcionesId = request.getParameterValues("opcionId");

			if (opcionesId != null) {
				List<PerfilOpcion> opciones = new ArrayList<PerfilOpcion>();
				for (int i = 0; i < opcionesId.length; i++) {
					opciones.add(new PerfilOpcion(new PerfilOpcionPK(perfil.getId().getPerfilId(), perfil.getId().getAplicacionId(), Long.parseLong(opcionesId[i]))));
				}
				perfil.setPerfilOpcions(opciones);
			}
			
			seguridadService.registrarAsignacionPerfilAplicacion(perfil);
			
			resultado = new ResultadoOperacionExito(Util.getMessage(codigoMensaje));
		} catch (Exception e) {
			resultado = guardarMensajeError(request, e);
		}
		return getRelativeAjaxURL(request, resultado);
    }*/
	/*
	@RequestMapping("/perreg.do")
    public String grabar(@ModelAttribute("perfil") Perfil perfil, HttpServletRequest request) throws Exception {
		ResultadoOperacion resultado = null;
		try {
			String codigoMensaje  = "perfil."+((perfil.getPerfilId()==null)?"registrar":"modificar")+".exito";
			
			seguridadService.registrarPerfil(perfil);
			
			resultado = new ResultadoOperacionExito(Util.getMessage(codigoMensaje));
		} catch (Exception e) {
			resultado = guardarMensajeError(request, e);
		}
    	return getRelativeAjaxURL(request, resultado);
    }
	
	@RequestMapping("/perasg.do")
    public String mostrarAsignacion(HttpServletRequest request) throws Exception {
		request.setAttribute("perfil",       seguridadService.obtenerPerfil(getParameterLong(request, "perfilId")));
		request.setAttribute("aplicaciones", seguridadService.obtenerAplicaciones(new Aplicacion()));
		request.setAttribute("estados",      administracionService.obtenerDetalles(Constante.TG_ESTADOS_REGISTRO));
		
    	return getRelativeURL("perasg");
    }
	
	@RequestMapping("/perasglst.do")
    public String mostrarAsignacionOpciones(HttpServletRequest request) throws Exception {
		PerfilPK perfilAplicacionPK = new PerfilPK(getParameterLong(request, "perfilId"), getParameterLong(request, "aplicacionId"));
		Perfil   perfilAplicacion = seguridadService.obtenerPerfilAplicacion(perfilAplicacionPK);
		if(perfilAplicacion == null) {
			perfilAplicacion = new Perfil();
			perfilAplicacion.setEstado(new TablaDetalle());
		}
		request.setAttribute("perfilAplicacion", perfilAplicacion);
		request.setAttribute("opciones"        , seguridadService.obtenerPerfilAplicacionOpcionesSeleccion(perfilAplicacionPK));		
    	return getRelativeURL("perasglst");
    }*/
}
